#include "compile_run.hpp"
#include "../comm/httplib.h"

using namespace ns_compile_and_run;
using namespace httplib;

void Usage(std::string proc)
{
    std::cerr << "Usage: " << "\n\t" << proc << " port" << std::endl;
}
// 编译服务可能会被多个人请求，形成的源文件名称必须具有唯一性，不然会互相影响
//./compile_server port
int main(int argc, char *argv[])
{
    // 充当客户端请求的json串
    //  std::string in_json;
    //  Json::Value in_value;
    // R"()" raw string
    //  in_value["code"]=R"(#include<iostream>
    //  int main(){
    //  std::cout<<"你可以看见我了"<<std::endl;
    //  return 0;
    // })";
    // in_value["input"]=" ";
    // in_value["cpu_limit"]=1;
    //   in_value["mem_limit"]=10240*3;
    //
    // Json::FastWriter writer;
    // in_json=writer.write(in_value);
    //
    // std::cout<<in_json<<std::endl;
    //
    // 将来给客户端返回的json串
    // std::string out_json;
    // CompileAndRun::Start(in_json,&out_json);
    //
    // std::cout<<out_json<<std::endl;

    // 将编译服务打包形成网络服务
    // cpp-httplib

    if (argc != 2)
    {
        Usage(argv[0]);
        return 1;
    }
    Server svr;
    svr.Get("/hello", [](const Request &req, Response &resq)
            {
        //用来进行基本测试
        resq.set_content("hello httplib,你好 httplib!","text/plain;charset=utf-8"); });

    //compile_and_run
    svr.Post("/compile_and_run", [](const Request &req, Response &resq)
             {
        //用户请求的服务是我们想要拿到的json串
        std::string in_json=req.body;
        std::string  out_json;
        if(!in_json.empty())
        {
            CompileAndRun::Start(in_json,&out_json);
            resq.set_content(out_json,"application/json;charset=utf-8");
        } });
    // svr.set_base_dir("./wwwroot");
    svr.listen("0.0.0.0", atoi(argv[1])); // 启动http服务

    return 0;
}